import { customRef ,ref} from "vue";
//customRef  自定义ref
//防抖
// export const debounce = (value:string,delay:
//   number) => {
//   let timerout = ref<number | null>(null)
//   return customRef((track,trigger)=>{
//     return {
//       get(){
//         //依赖追踪
//         console.log('依赖追踪');
//         track()
//         return value
//       },
//       set(newValue){
//         clearTimeout(timerout)
//         timerout = setTimeout(()=>{
//           //触发更新
//           console.log('触发更新');
//           value = newValue
//           trigger()
//         },delay)
//       }
//     }
//   })
// }


export function useDebouncedRef<T>(value:any, delay:number = 500) {
  const innerValue = ref(value); // 内部响应式引用，用于跟踪原始值  
  // let timeout = ref<number|null>(null)
  let timeout: number | null = null; // 用于存储 setTimeout 的返回值 
  return customRef((track, trigger) => {
    return {
      get() {
        track()
        console.log('依赖追踪', value);
        return innerValue.value
      },
      set(newValue) {
        clearTimeout(timeout)
        timeout = setTimeout(() => {
          // value = newValue
          innerValue.value = newValue; // 更新内部响应式引用的值
          console.log('触发更新', newValue);
          trigger()
        }, delay)
      }
    }
  })
}

export const useThrottle =  (func:any,delay:number=500)=>{

  let shouldExecure = true  //本次调用状态是否执行
  return async function(){
    if(!shouldExecure) return
    console.log('this', this);
    console.log('func', func);
    // shouldExecure = false
    await func.apply(func) //这个this指向谁?
    // await func.apply(func) //这个this指向谁?
    
    setTimeout(()=>shouldExecure=true,delay)

  }
}